2021-10-05 Python 3.10の新機能(その11) その他の変更
その他、Python 3.10 で更新された機能から、お気に入りの項目を簡単に紹介します。
オックスフォード大学問題¶
さてみなさん、Pythonのインタープリタを起動して、次の式を実行してみてください。
0xfor-d*University
一見、エラーになりそうに見えますが、15
という値が返ってきます。なぜこんな結果になるのか、わかるでしょうか?
この式を見やすく変形すると、次のようになります。
0xf or (-d * University)
元の式 0xfor
は、16進数の 0xf
の直後に空白をつけ
2021-09-10 Python 3.10の新機能(その10) Dataclassでslotsが利用可能に
dataclass は、Pythonで主にデータを格納するためのクラスで、C言語などでは構造体に相当するようなデータ構造を、かんたんに定義できるようになっています。
たとえば、次の Person
は、名前と年齢を格納するdataclassです。
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
person1 = Person(name="パーソン太郎", age=20)
person2 = Person(name="パーソン次郎", age=30
2021-09-08 Python 3.10の新機能(その9) zip()関数に引数 strict を追加
Pythonの組み込み関数 zip() は、引数に指定したリストオブジェクトなどのイテラブルオブジェクトから要素を一つづつ取得し、組み合わせてタプルを作成します。
>>> list1 = [1, 2, 3, 4]
>>> list2 = ['a', 'b', 'c', 'd']
>>> list3 = ['あ', 'い', 'う', 'え']
>>> for tp in zip(list1, list2, list3):
... print(tp)
...
(1, 'a', 'あ')
(2, 'b', 'い')
(3, 'c', 'う')
(4, 'd', 'え')
この例では、zip()
に 3つの
2021-09-05 Python 3.10の新機能(その8) OpenSSL 1.1.1が必須に
Pythonでは、https通信やメッセージダイジェストの作成などの暗号関連機能に、OpenSSLを利用しています。
これまで、Pythonでは OpenSSL のVersion 1.0.2以降が利用可能でしたが、Python 3.10からは、OpenSSL 1.1.1以降が必須となりました(PEP 644 Require OpenSSL 1.1.1 or newer)。
WindowsやMacなどで、Python.orgのインストーラを利用する場合には、OpensSSLの最新版が含まれているので気にする必要はありません。また、Ma
2021-08-30 Python 3.10の新機能(その7) ユーザ定義型ガード
Python3.10で追加された型ヒント関連機能から、 PEP 647 User-Defined Type Guards を解説します。
型の絞り込みと型ガード¶
mypyなどの静的な型チェッカが型を推論する時、プログラムの処理を参考にして、可能な型の種類を絞り込んでいます。
例えば、
var1: int | None = func1()
print(var1 + 1) # 型チェックエラー
というプログラムでは、変数 var1
の型は、 int
または None
のどちらかです。var1
が int
の場合は var1 + 1
を正常に計算できますが、 None
の場合には N